home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / utilities / text / less-278.lha / less-278 / src.lha / source / opttbl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-14  |  7.4 KB  |  274 lines

  1. /*
  2.  * Copyright (c) 1984,1985,1989,1994,1995  Mark Nudelman
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice in the documentation and/or other materials provided with 
  12.  *    the distribution.
  13.  *
  14.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
  15.  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  17.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
  18.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  19.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
  20.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
  21.  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  22.  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
  23.  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 
  24.  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  */
  26.  
  27.  
  28. /*
  29.  * The option table.
  30.  */
  31.  
  32. #include "less.h"
  33. #include "option.h"
  34.  
  35. /*
  36.  * Variables controlled by command line options.
  37.  */
  38. public int quiet;        /* Should we suppress the audible bell? */
  39. public int how_search;        /* Where should forward searches start? */
  40. public int top_scroll;        /* Repaint screen from top?
  41.                    (alternative is scroll from bottom) */
  42. public int pr_type;        /* Type of prompt (short, medium, long) */
  43. public int bs_mode;        /* How to process backspaces */
  44. public int know_dumb;        /* Don't complain about dumb terminals */
  45. public int quit_at_eof;        /* Quit after hitting end of file twice */
  46. public int squeeze;        /* Squeeze multiple blank lines into one */
  47. public int tabstop;        /* Tab settings */
  48. public int back_scroll;        /* Repaint screen on backwards movement */
  49. public int forw_scroll;        /* Repaint screen on forward movement */
  50. public int twiddle;        /* Display "~" for lines after EOF */
  51. public int caseless;        /* Do "caseless" searches */
  52. public int linenums;        /* Use line numbers */
  53. public int cbufs;        /* Current number of buffers */
  54. public int autobuf;        /* Automatically allocate buffers as needed */
  55. public int nohelp;        /* Disable the HELP command */
  56. public int ctldisp;        /* Send control chars to screen untranslated */
  57. public int force_open;        /* Open the file even if not regular file */
  58. public int swindow;        /* Size of scrolling window */
  59. public int jump_sline;        /* Screen line of "jump target" */
  60. public int chopline;        /* Truncate displayed lines at screen width */
  61. public int no_init;        /* Disable sending ti/te termcap strings */
  62. #if HILITE_SEARCH
  63. public int hilite_search;    /* Highlight matched search patterns? */
  64. #endif
  65.  
  66. /*
  67.  * Table of all options and their semantics.
  68.  */
  69. static struct option option[] =
  70. {
  71.     { 'a', BOOL, OPT_OFF, &how_search, NULL,
  72.         "Search includes displayed screen",
  73.         "Search skips displayed screen",
  74.         NULL
  75.     },
  76.     { 'b', NUMBER, 10, &cbufs, opt_b, 
  77.         "Buffers: ",
  78.         "%d buffers",
  79.         NULL
  80.     },
  81.     { 'B', BOOL, OPT_ON, &autobuf, NULL,
  82.         "Don't automatically allocate buffers",
  83.         "Automatically allocate buffers when needed",
  84.         NULL
  85.     },
  86.     { 'c', TRIPLE, OPT_OFF, &top_scroll, NULL,
  87.         "Repaint by scrolling from bottom of screen",
  88.         "Repaint by clearing each line",
  89.         "Repaint by painting from top of screen"
  90.     },
  91.     { 'd', BOOL|NO_TOGGLE, OPT_OFF, &know_dumb, NULL,
  92.         "Assume intelligent terminal",
  93.         "Assume dumb terminal",
  94.         NULL
  95.     },
  96. #if MSOFTC
  97.     { 'D', STRING|REPAINT, 0, NULL, opt_D,
  98.         "color desc: ", NULL, NULL
  99.     },
  100. #endif
  101.     { 'e', TRIPLE, OPT_OFF, &quit_at_eof, NULL,
  102.         "Don't quit at end-of-file",
  103.         "Quit at end-of-file",
  104.         "Quit immediately at end-of-file"
  105.     },
  106.     { 'f', BOOL, OPT_OFF, &force_open, NULL,
  107.         "Open only regular files",
  108.         "Open even non-regular files",
  109.         NULL
  110.     },
  111. #if HILITE_SEARCH
  112.     { 'g', TRIPLE|HL_REPAINT, OPT_ONPLUS, &hilite_search, NULL,
  113.         "Don't highlight search matches",
  114.         "Highlight matches for previous search only",
  115.         "Highlight all matches for previous search pattern",
  116.     },
  117. #endif
  118.     { 'h', NUMBER, -1, &back_scroll, NULL,
  119.         "Backwards scroll limit: ",
  120.         "Backwards scroll limit is %d lines",
  121.         NULL
  122.     },
  123.     { 'H', BOOL|NO_TOGGLE, OPT_OFF, &nohelp, NULL,
  124.         "Allow help command",
  125.         "Don't allow help command",
  126.         NULL
  127.     },
  128.     { 'i', TRIPLE|HL_REPAINT, OPT_OFF, &caseless, opt_i,
  129.         "Case is significant in searches",
  130.         "Ignore case in searches",
  131.         "Ignore case in searches and in patterns"
  132.     },
  133.     { 'j', NUMBER, 1, &jump_sline, NULL,
  134.         "Target line: ",
  135.         "Position target at screen line %d",
  136.         NULL
  137.     },
  138. #if USERFILE
  139.     { 'k', STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_k,
  140.         NULL, NULL, NULL
  141.     },
  142. #endif
  143.     { 'l', STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_l,
  144.         NULL, NULL, NULL
  145.     },
  146.     { 'm', TRIPLE, OPT_OFF, &pr_type, NULL,
  147.         "Short prompt",
  148.         "Medium prompt",
  149.         "Long prompt"
  150.     },
  151.     { 'n', TRIPLE|REPAINT, OPT_ON, &linenums, NULL,
  152.         "Don't use line numbers",
  153.         "Use line numbers",
  154.         "Constantly display line numbers"
  155.     },
  156. #if LOGFILE
  157.     { 'o', STRING, 0, NULL, opt_o,
  158.         "log file: ", NULL, NULL
  159.     },
  160.     { 'O', STRING, 0, NULL, opt__O,
  161.         "Log file: ", NULL, NULL
  162.     },
  163. #endif
  164.     { 'p', STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_p,
  165.         NULL, NULL, NULL
  166.     },
  167.     { 'P', STRING, 0, NULL, opt__P,
  168.         "prompt: ", NULL, NULL
  169.     },
  170.     { 'q', TRIPLE, OPT_OFF, &quiet, NULL,
  171.         "Ring the bell for errors AND at eof/bof",
  172.         "Ring the bell for errors but not at eof/bof",
  173.         "Never ring the bell"
  174.     },
  175.     { 'r', BOOL|REPAINT, OPT_ON, &ctldisp, NULL,
  176.         "Display control characters directly",
  177.         "Display control characters as ^X",
  178.         NULL
  179.     },
  180.     { 's', BOOL|REPAINT, OPT_OFF, &squeeze, NULL,
  181.         "Display all blank lines",
  182.         "Squeeze multiple blank lines",
  183.         NULL
  184.     },
  185.     { 'S', BOOL|REPAINT, OPT_OFF, &chopline, NULL,
  186.         "Fold long lines",
  187.         "Chop long lines",
  188.         NULL
  189.     },
  190. #if TAGS
  191.     { 't', STRING|NO_QUERY, 0, NULL, opt_t,
  192.         "tag: ", NULL, NULL
  193.     },
  194.     { 'T', STRING, 0, NULL, opt__T,
  195.         "tags file: ", NULL, NULL
  196.     },
  197. #endif
  198.     { 'u', TRIPLE|REPAINT, OPT_OFF, &bs_mode, NULL,
  199.         "Display underlined text in underline mode",
  200.         "Backspaces cause overstrike",
  201.         "Print backspace as ^H"
  202.     },
  203.     { 'V', NOVAR, 0, NULL, opt__V,
  204.         NULL, NULL, NULL
  205.     },
  206.     { 'w', BOOL|REPAINT, OPT_ON, &twiddle, NULL,
  207.         "Display nothing for lines after end-of-file",
  208.         "Display ~ for lines after end-of-file",
  209.         NULL
  210.     },
  211.     { 'x', NUMBER|REPAINT, 8, &tabstop, NULL,
  212.         "Tab stops: ",
  213.         "Tab stops every %d spaces", 
  214.         NULL
  215.     },
  216.     { 'X', BOOL|NO_TOGGLE, OPT_OFF, &no_init, NULL,
  217.         "Send init/deinit strings to terminal",
  218.         "Don't use init/deinit strings",
  219.         NULL
  220.     },
  221.     { 'y', NUMBER, -1, &forw_scroll, NULL,
  222.         "Forward scroll limit: ",
  223.         "Forward scroll limit is %d lines",
  224.         NULL
  225.     },
  226.     { 'z', NUMBER, -1, &swindow, NULL,
  227.         "Scroll window size: ",
  228.         "Scroll window size is %d lines",
  229.         NULL
  230.     },
  231.     { '?', NOVAR, 0, NULL, opt_query,
  232.         NULL, NULL, NULL
  233.     },
  234.     { '\0' }
  235. };
  236.  
  237.  
  238. /*
  239.  * Initialize each option to its default value.
  240.  */
  241.     public void
  242. init_option()
  243. {
  244.     register struct option *o;
  245.  
  246.     for (o = option;  o->oletter != '\0';  o++)
  247.     {
  248.         /*
  249.          * Set each variable to its default.
  250.          */
  251.         if (o->ovar != NULL)
  252.             *(o->ovar) = o->odefault;
  253.     }
  254. }
  255.  
  256. /*
  257.  * Find an option in the option table.
  258.  */
  259.     public struct option *
  260. findopt(c)
  261.     int c;
  262. {
  263.     register struct option *o;
  264.  
  265.     for (o = option;  o->oletter != '\0';  o++)
  266.     {
  267.         if (o->oletter == c)
  268.             return (o);
  269.         if ((o->otype & TRIPLE) && toupper(o->oletter) == c)
  270.             return (o);
  271.     }
  272.     return (NULL);
  273. }
  274.